Software testing is a process of validating and verifying that a computer program meets the requirements that guided its design and development and that the program works as expected. The testing process typically involves testing the operation of the program at various levels. For example, unit testing may be utilized to verify the functionality of a specific unit or a component of the program, whereas integration testing seeks to verify the interfaces between components against a software design by combining individual software components/modules and testing them as a group.
In a service-oriented system, where a large number of software components or services may be involved, integration testing can become challenging. Without a careful design, changes to the system as a result of the testing might cause unpredictable effects to the system and render other operations on the system unreliable. For example, integration testing in a service-oriented system may be performed by installing a service under test directly into the system and/or replacing an existing service. However, installing a service with potential defects into the system might affect other unrelated tests and/or systems, thereby providing false positives to unrelated tests or even causing test failures.
Better results may be achieved by performing integration testing in an integration environment where changes made by the testing are isolated from the rest of the system. In order to accomplish this, an integration stack may be created by building an instance for each of the services involved in the testing of the service under test. These instances allow testing to be performed in a separate environment that does not affect the services currently running in the production system. Such an integration stack, however, can be expensive to set up and may have a high maintenance cost and a low efficiency due to largely redundant instances in the integration stack.
The disclosure made herein is presented with respect to these and other considerations.